package main

import (
	"fmt"
	"mmo_game_zinx/apis"
	"mmo_game_zinx/core"
	"yanx/yiface"
	"yanx/ynet"
)

// 当客户端建立连接之后的hook函数
func OnConnectionAdd(conn yiface.IConnection) {
	// 创建一个Player对象
	player := core.NewPlayer(conn)
	// 给客户端发送MsgID：1的消息
	player.SyncPid()
	// 给客户端发送MsgID：200的消息
	player.BroadCastStartPosition()

	// 将当前新上线的我们考添加到WordMgr中
	core.WorldMgrObj.AddPlayer(player)

	// 将该连接绑定一个Pid属性，玩家ID的属性
	conn.SetProperty("pid", player.Pid)

	// 同步周边玩家，告知他们当前玩家已经上线，广播当前玩家的位置信息
	player.SyncSurrounding()

	// fmt.Println("====>Player pid = ", player.Pid, "is arrived <=====")
}

// 当前链接断开之前的Hook钩子函数
func DoConnectionLost(conn yiface.IConnection) {
	// 获取当前链接绑定的玩家
	pid, _ := conn.GetProperty("pid")
	player := core.WorldMgrObj.GetPlayerByPid(pid.(int32))

	// 玩家下线业务
	player.Offline()

	fmt.Println("-=-=-=-=-=-Player pid = ", pid, "下线了《《《《")
}

func main() {
	// 1 创建一个server句柄，使用yanx的api
	s := ynet.NewServer("MMO Game Yanx")

	// 2 注册链接的钩子函数
	s.SetOnConnStart(OnConnectionAdd)
	s.SetOnConnStop(DoConnectionLost)

	// 3 给当前服务器添加自定义的router
	s.AddRouter(2, &apis.WorldChatApi{})
	s.AddRouter(3, &apis.MoveApi{})

	// 4 启动server
	s.Serve()
}
